home *** CD-ROM | disk | FTP | other *** search
- program moon; { Mondpositionen berechnen }
-
- const
- {$I b:math_con }
-
- type
- DATUM = record
- jahr:integer;
- monat:1..12;
- tag:1..31;
- end;
-
- ZEIT = record
- stunde:0..23;
- minute,sekunde:0..59;
- end;
-
- JUL = record
- ganz:long_integer;
- fract:real;
- end;
-
- var start,stop:JUL;
- date:DATUM;
- lokal:ZEIT;
- ra,de,r,f,f1:real;
- i,increment,h,h1,h2:integer;
- printer:boolean;
- c:char;
-
- {$I b:math_sub }
-
- procedure juldat (var julian:JUL; gregorian:DATUM; uhrzeit:ZEIT;
- flag:boolean);
- external;
-
- procedure gregdat(var gregorian:DATUM; var uhrzeit:ZEIT; julian:JUL;
- flag:boolean);
- external;
-
- procedure lun_pos (var ra,de,r:real; julian:JUL);
- external;
-
- procedure par_ein(var start,stop:JUL; var incr:integer; var printer:boolean);
- var lokal:ZEIT;
- date:DATUM;
- greg:boolean;
- c:char;
- t:real;
- begin
- writeln(chr(27),'E< CALCULATE LUNAR POSITION >');
- writeln;
- writeln(' Enter parameters:');
- write('> Enter start: year : '); readln(date.jahr);
- write('> month: '); readln(date.monat);
- write('> day : '); readln(date.tag);
- write('> gregorian calendar (y/n): '); read(c);
- writeln;
- if c = 'n' then greg := false else greg := true;
- lokal.stunde := 0; lokal.minute := 0; lokal.sekunde := 0;
- juldat(start,date,lokal,greg);
- write('> Enter stop : year : '); readln(date.jahr);
- write('> month: '); readln(date.monat);
- write('> day : '); readln(date.tag);
- write('> gregorian calendar (y/n): '); read(c);
- writeln;
- if c = 'n' then greg := false else greg := true;
- juldat(stop,date,lokal,greg);
- write('> Enter UT : hour : '); readln(lokal.stunde);
- write('> minute: '); readln(lokal.minute);
- write('> second: '); readln(lokal.sekunde);
- t := (lokal.stunde * 3600.0 + lokal.minute * 60.0 + lokal.sekunde) /
- 86400.0;
- start.fract := start.fract + t;
- stop.fract := stop.fract + t;
- if start.fract < 0.0 then
- begin
- start.fract := start.fract + 1.0; start.ganz := start.ganz - 1;
- stop.fract := stop.fract + 1.0; stop.ganz := stop.ganz - 1
- end;
- writeln;
- write('> Enter increment: '); readln(incr);
- writeln;
- write('> Output to screen or printer (s/p): '); read(c);
- if c = 'p' then printer := true else printer := false;
- end;
-
- begin
- par_ein(start,stop,increment,printer);
- gregdat(date,lokal,start,true); i := 0;
- if printer then rewrite(output,'LST:');
- while start.ganz <= stop.ganz do
- begin
- if i = 0 then
- begin
- if not printer then write(chr(27),'E');
- writeln(' Lunar positions of at ',lokal.stunde:2,'h',
- lokal.minute:2,'m',lokal.sekunde:2,'s UT for equinoxe 1950.0');
- writeln;
- writeln(' Date RA De r/Erdradien');
- writeln(' ------------------------------------------------')
- end;
- lun_pos(ra,de,r,start);
- ra := deg(ra) / 15.0; de := deg(de);
- h := trunc(ra); f := (ra - h) * 60;
- h2 := sign(de); de := abs(de); h1 := h2 * trunc(de);
- f1 := (de - abs(h1)) * 60.0;
- gregdat(date,lokal,start,true);
- write(' ');
- writeln(date.jahr:4,date.monat:3,date.tag:3,' ',h:3,f:5:1,' ',
- h1:3,f1:5:1,' ',r:7:4);
- i := i + 1;
- start.ganz := start.ganz + increment;
- if not printer then
- if i = 15 then
- begin
- writeln; writeln(' PRESS ANY KEY TO CONTINUE');
- read(c);
- i := 0
- end
- end;
- read(c)
- end.
-
-